package com.iamteer.day13;
/**
主要回顾：死锁现象

Java 的同步机制解决了线程安全问题，但也带来了死锁的风险

死锁现象：
	1.根本原因：
		1.1 存在 2 个或者以上的线程
		1.2 存在 2 个或者以上的共享资源
		
	2.解决办法：
		尽量避免！
 */

//故意制造死锁
class DLTest extends Thread {
	public DLTest(String name){
		super(name);
	}
	
	@Override
	public void run() {	//最可能出现的情况是张三拿到遥控器，李四拿到电池，相互僵持，产生死锁现象
		if ("张三".equals(Thread.currentThread().getName())) {
			synchronized ("遥控器") {		//锁住遥控器，开了空调之后释放
				System.out.println("张三拿到了遥控器，准备去拿电池");
				synchronized ("电池") {	//锁住电池，开了空调之后释放
					System.out.println("张三拿到了电池，打开了空调。。。");					
				}
			}
		} else if ("李四".equals(Thread.currentThread().getName())) {
			synchronized ("电池") {		//锁住电池，开了空调之后释放
				System.out.println("李四拿到了电池，准备去拿遥控器");
				synchronized ("遥控器") {//锁住遥控器，开了空调之后释放
					System.out.println("李四拿到了遥控器，打开了空调。。。");					
				}
			}	
		}
	}
}

public class DeadLock {

	public static void main(String[] args) {
		DLTest t1 = new DLTest("张三");
		DLTest t2 = new DLTest("李四");
		
		t1.start();
		t2.start();
	}

}
